0896. 单调数列【简单】
1. 📝 题目描述
如果数组是单调递增或单调递减的,那么它是单调的。
- 如果对于所有
i <= j,nums[i] <= nums[j],那么数组nums是单调递增的 - 如果对于所有
i <= j,nums[i] >= nums[j],那么数组nums是单调递减的
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
示例 1:
txt
输入:nums = [1,2,2,3]
输出:true1
2
2
示例 2:
txt
输入:nums = [6,5,4,4]
输出:true1
2
2
示例 3:
txt
输入:nums = [1,3,2]
输出:false1
2
2
提示:
1 <= nums.length <= 10^5-10^5 <= nums[i] <= 10^5
2. 🎯 s.1 - 线性扫描(双标志)
js
/**
* @param {number[]} nums
* @return {boolean}
*/
var isMonotonic = function (nums) {
const n = nums.length
if (n <= 2) return true
let inc = true // 递增标志
let dec = true // 递减标志
for (let i = 1; i < n; i++) {
// 非递减
if (nums[i] > nums[i - 1]) dec = false
// 非递增
if (nums[i] < nums[i - 1]) inc = false
// 既非递增也非递减,意味着 nums 不具备单调性
if (!inc && !dec) return false
}
return true
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 时间复杂度:
,单次线性扫描 - 空间复杂度:
算法思路:
- 同时维护递增标志
inc与递减标志dec - 遍历相邻元素对:若出现
nums[i] > nums[i-1]则不可能递减;若nums[i] < nums[i-1]则不可能递增 - 元素相等不影响单调性,允许存在
- 若两标志同时为
false立即剪枝返回false - 检查通过意味着具备单调性,结尾返回
true